package javapuzzles;

public class Lazy {
	private static boolean initialized = false;
	static {
		Thread t = new Thread(new Runnable() {
			public void run() {
				initialized = true;
			}
		});
		t.start();
		try {
			t.join();
		} catch(InterruptedException e) {
			throw new AssertionError(e);
		}
	}
	
	public Lazy() {
		System.out.println(initialized);
	}
	
	public static void main(String[] args) {
		/* 
		 * main 线程访问initialized时，检查Lazy是否被初始化，发现并没有，则开始初始化Lazy.
		 * 进入static块，启动Lazy的run线程，在把initialized设为false时，当前run线程也要检查
		 * Lazy是否被初始化，发现main线程正在初始化，所以进入等待，而同时main在等待run线程执行
		 * 完毕，造成死锁。 */
		System.out.println(initialized);
	}
}
